package com.wsc.singleton;

/**
 * 懒汉模式
 * 在调用方法的时候才初始化这个变量
 * 在多线程访问的时候会有影响，可能会 new 出多个实例。
 */
public class LazyMan {
    // 先不初始化这个实例
    private static LazyMan INSTANCE;

    /**
     * 私有化构造函数
     */
    private LazyMan(){}

    /**
     *
     * @return 单例实例
     */
    public static LazyMan getInstance(){
        if (INSTANCE == null){
            try { // 模拟高并发多线程情况下处理业务逻辑的时间,任何线程会被其他线程打断
                Thread.sleep(1);
            }catch (Exception e){
                e.printStackTrace();
            }
            INSTANCE = new LazyMan();
        }
        return INSTANCE;
    }

    /**
     * 多个线程调用这个方法,检查对象是否一样
     */
    public static void main(String[] args) {
        for (int i = 0; i < 100 ; i++) {
            new Thread(()->{
                System.out.println(LazyMan.getInstance().hashCode());
            }).start();
        }
    }
}
